<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8">
    <link href="../../style.css" rel="stylesheet" type="text/css">
    <title>PETSc: Documentation: Changes: 3.9</title>
  </head>
  <body>

    <div id="logo">
      <h1>PETSc</h1>
    </div>

    <div id="header">
      <h1><!--begin-->Documentation: Changes: 3.9<!--end--></h1>
    </div>

    <hr>

    <div id="sidebar">
      <ul>
        <li><a href="../../index.html">Home</a></li>
        <li><a href="../../download/index.html">Download</a></li>
        <li><a href="../../features/index.html">Features</a></li>
        <li>
          <a href="../../documentation/index.html">Documentation</a>
          <ul>
            <li><a href="../index.html">Manual pages and Users Manual</a></li>
            <li><a href="../referencing.html">Citing PETSc</a></li>
            <li><a href="../tutorials/index.html">Tutorials</a></li>
            <li><a href="../installation.html">Installation</a></li>
            <li><a href="../saws.html">SAWs</a></li>
            <li>
              <a href="index.html">Changes</a>
              <ul>
                <li><a href="dev.html">dev</a></li>
                <li><a href="310.html">3.10</a></li>
                <li><span class="current">3.9</span></li>
                <li><a href="38.html">3.8</a></li>
                <li><a href="37.html">3.7</a></li>
                <li><a href="36.html">3.6</a></li>
                <li><a href="35.html">3.5</a></li>
                <li><a href="34.html">3.4</a></li>
                <li><a href="33.html">3.3</a></li>
                <li><a href="32.html">3.2</a></li>
                <li><a href="31.html">3.1</a></li>
                <li><a href="300.html">3.0.0</a></li>
                <li><a href="233.html">2.3.3</a></li>
                <li><a href="232.html">2.3.2</a></li>
                <li><a href="231.html">2.3.1</a></li>
                <li><a href="230.html">2.3.0</a></li>
                <li><a href="221.html">2.2.1</a></li>
                <li><a href="220.html">2.2.0</a></li>
                <li><a href="216.html">2.1.6</a></li>
                <li><a href="215.html">2.1.5</a></li>
                <li><a href="213.html">2.1.3</a></li>
                <li><a href="212.html">2.1.2</a></li>
                <li><a href="211.html">2.1.1</a></li>
                <li><a href="21.html">2.1.0</a></li>
                <li><a href="2029.html">2.0.29</a></li>
                <li><a href="2028.html">2.0.28</a></li>
                <li><a href="2024.html">2.0.24</a></li>
                <li><a href="2022.html">2.0.22</a></li>
                <li><a href="2018-21.html">2.0.18-21</a></li>
                <li><a href="2017.html">2.0.17</a></li>
                <li><a href="2016.html">2.0.16</a></li>
                <li><a href="2015.html">2.0.15</a></li>
              </ul>
            </li>
            <li><a href="../bugreporting.html">Bug Reporting</a></li>
            <li><a href="../codemanagement.html">Code Management</a></li>
            <li><a href="../faq.html">FAQ</a></li>
            <li><a href="../license.html">License</a></li>
            <li><a href="../linearsolvertable.html">Linear Solver Table</a></li>
          </ul>
        </li>
        <li><a href="../../publications/index.html">Applications/Publications</a></li>
        <li><a href="../../miscellaneous/index.html">Miscellaneous</a></li>
        <li><a href="../../miscellaneous/external.html">External Software</a></li>
        <li><a href="../../developers/index.html">Developers Site</a></li>
      </ul>
    </div>

    <!--begin-->

    <style type="text/css">
      h2 {
        color: red;
      }

      h4 {
        font-weight: bold;
        text-decoration: underline;
      }
    </style>

    <div id="main">

      <div align="center">
        <h2><a name="CHANGES">CHANGES in the PETSc 3.9 Version</a></h2>
      </div>

      <h4>General:</h4>
      <ul>
      <li>The scripts in $PETSC_DIR/bin are now in $PETSC_DIR/lib/petsc/bin</li>
      <li>PetscStrncat() renamed to PetscStrlcat() now takes the length of the original allocated space in the string instead of the part left after strings have been copied or concatenated in</li>
      <li>CUDA and ViennaCL as GPU backends can now also be used with the release version (no need to use the master branch).</li>
      </ul>
      <h4>Configure/Build:</h4>
      <ul>
        <li>Option --with-cuda-arch is removed. Use CUDAFLAGS to directly specify relevent nvcc option [for ex: CUDAFLAGS=-arch=sm_20]</li>
        <li>Added --with-avx512-kernels to specify that hand-coded kernels using AVX-512 intrinsics should be used when available. Currently defaults to off.</li>
      </ul>
      <h4>IS:</h4>
      <h4>PetscDraw:</h4>
      <h4>PF:</h4>
      <h4>Vec:</h4>
      <ul>
        <li>Added VECNODE type. Vector uses on-node shared memory to store its entries.</li>
      </ul>
      <h4>VecScatter:</h4>
      <ul>
        <li>VecScatter becomes a PETSc object. Existing vecscatters have types VECSCATTERSEQ, VECSCATTERMPI1.</li>
        <li>Added VECSCATTERMPI3. It stores vector ghost values to the on-node shared memory. </li>
        <li>Added VECSCATTERMPI3NODE. It works on vectors of type VECNODE.</li>
      </ul>
      <h4>PetscSection:</h4>
      <h4>Mat:</h4>
      <ul>
        <li>Added MatShellTestMultTranspose() and MatShellTestMult() for checking if user provided MATSHELL matches the Jacobian of a given function computed with differencing.</li>
        <li>MatSolverPackage is replaced with MatSolverType.</li>
        <li>mat_solver_package is replaced with mat_solver_type in options, e.g. <code>-pc_factor_mat_solver_type</code> should be used instead of <code>-pc_factor_mat_solver_package</code>.</li>
        <li>MatShellSetOperation() and MatShellGetOperation() can now only be used for MATSHELL matrices, use MatSetOperation() and MatGetOperation() to set an operation for any matrix type.</li>
        <li>Added MatMumpsGetInverse().</li>
        <li>MatMult() for the MATAIJ type has been optimized using AVX-512 intrinsics; must be enabled at configure time.</li>
        <li>Added a new Mat type MATSELL, featuring a fast MatMult() kernel on AVX-512 architecture such as KNL and Skylake.</li>
        <li>Added support for additional MKL sparse BLAS operations in MATAIJMKL: MatMatMult(), MatTransposeMatMult(), MatPtAP() (symmetric A only). MKL version 18, update 2 or later is required for MatPtAP()/MatPtAPNumeric() and MatMatMultNumeric().
        <li>Added MatGetInertia() for SuperLU_DIST interface.</li>
            </ul>
      <h4>PC:</h4>
      <ul>
      <li> Added -pc_mg_distinct_smoothup and
      PCMGSetDistinctSmoothUp() so that one can control the down and
        up smoothers options separately from the options database</li>
      <li> Removed -pc_mg_smoothup and -pc_mg_smoothdown and
      PCMGSetNumberSmoothUp() and PCMGSetNumberSmoothDown().  Instead,
      configure the solvers on the levels with -mg_levels_ksp_max_it
      n.  If separate numbers of smoothing steps are required for up
      and down smoothers, use -pc_mg_distinct_smoothup
        -mg_levels_ksp_max_it n -mg_levels_up_ksp_max_it m.</li>
      <li>Added PCCHOLESKY to SuperLU_DIST interface.</li>
      </ul>
      <h4>KSP:</h4>
      <h4>SNES:</h4>
      <ul>
        <li>Removed SNESHasDM() because there is always a DM in SNES.</li>
        <li>The SNESType of SNESTEST has been removed, the testing code can now be accessed with the options -snes_test_jacobian, -snes_test_jacobian_display -snes_test_jacobian_display_threshold <threshold> and is
            called each time SNES computes a new Jacobian.
      </ul>
      <h4>SNESLineSearch:</h4>
      <h4>TS:</h4>
      <ul>
      <li>Added TSRHSJacobianTestTranspose() and TSRHSJacobianTest() checking if user provide MATSHELL Jacobian with TSSetRHSJacobian() matches the Jacobian of the function provided to TSSetRHSFunction() computed with finite differencing. Command line options -ts_rhs_jacobian_test_mult_transpose -mat_shell_test_mult_transpose_view  and -ts_rhs_jacobian_test_mult -mat_shell_test_mult_view.</li>
      <li>Added -ts_trajectory_dirname and -ts_trajectory_filetemplate to allow users to specify the folder name and file name template for disk checkpoints.</li>
      </ul>
      <h4>TAO:</h4>
      <ul>
        <li>Changed TaoDefaultMonitor() to TaoMonitorDefault() to match other PETSc default monitor names, also now print with the same format as other monitors %3D Tao ....</li>
        <li>Added VecLock{Push|Pop} calls around user callbacks; use of VecGetArray in user callbacks is now prohibited.</li>
        <li>Added default matrix-free finite-differencing implementation for Hessian MatMult with TaoDefaultComputeHessianMFFD(). Can be selected with -tao_mf_hessian at command line.</li>
        <li>Added Projected Gradient Descent (PGD) and Bounded Nonlinear Conjugate Gradient (BNCG) algorithms for bound constrained problems.</li>
        <li>Improved support for recycling BFGS correction vectors between subsequent TaoSolve() calls for the unconstrained LMVM algorithm. Can be enabled using -tao_lmm_recycle at command line.</li>
        <li>Convergence tests for all algorithms are separated out of TaoMonitor() calls.</li>
      </ul>
      <h4>DM/DA:</h4>
      <h4>DMPlex:</h4>
      <h4>PetscViewer:</h4>
      <ul>
        <li>PetscViewerVTKFWrite() now takes a MPI_Datatype instead of a PetscDataType argument.</li>
      </ul>
      <h4> DMNetwork:</h4>
      <ul>
	<li> DMNetworkGetComponentDataArray and DMNetworkGetComponentTypeOffset are no longer available. Use DMNetworkGetComponent instead.
        <li>Added support for sub-dmnetworks.</li>
      </ul>
      <h4>SYS:</h4>
      <ul>
        <li>PetscPClose() no longer returns error code from pclose() because some systems cannot reliably deliver it</li>
        <li>PetscPopUpSelect() has been removed.</li>
      </ul>
      <h4>AO:</h4>
      <h4>Sieve:</h4>
      <h4>Fortran:</h4>
      <ul>
        <li>The F90Array routines now take a MPI_Datatype argument instead of a PetscDataType. This should not affect user code.</li>
      </ul>
    </div>

    <!--end-->

    <hr>

  </body>
</html>
